//+------------------------------------------------------------------+
//|                                                        Bands.mq4 |
//|                      Copyright  2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright  2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Black
#property indicator_color2 Black
#property indicator_color3 Black
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_color6 Black
#property indicator_color7 Black
#property indicator_color8 Black

extern int MACD_Fast = 12;
extern int MACD_Slow = 26;
extern int MACD_Signal = 9;
extern color MACD_UP_ABOVE_ZERO_color = DodgerBlue;
extern color MACD_UP_BELOW_ZERO_color = DarkGray;
extern color MACD_DN_ABOVE_ZERO_color = DarkGray;
extern color MACD_DN_BELOW_ZERO_color = Magenta;
extern bool Show_MTF_Text = False;
extern int Shift_MTF_Text_UP_DN = 10;
extern int Shift_MTF_Text_SIDEWAYS = 0;
extern string MTF_Text = "Arial Bold";
extern int MTF_TextSIZE = 15;
double gd_128;
double gd_136;
double g_ibuf_144[];
double g_ibuf_148[];
double g_ibuf_152[];
double g_ibuf_156[];
double g_ibuf_160[];
double g_ibuf_164[];
double g_ibuf_168[];
double g_ibuf_172[];

int init() {
   if (WindowBarsPerChart() < 400) gd_136 = 2;
   if (WindowBarsPerChart() < 200) gd_136 = 3;
   if (WindowBarsPerChart() < 100) gd_136 = 6;
   if (WindowBarsPerChart() < 50) gd_136 = 13;
   gd_128 = 1;
   IndicatorShortName("MACD Candles#2");
   IndicatorBuffers(8);
   SetIndexBuffer(0, g_ibuf_144);
   SetIndexBuffer(1, g_ibuf_148);
   SetIndexBuffer(2, g_ibuf_152);
   SetIndexBuffer(3, g_ibuf_156);
   SetIndexBuffer(4, g_ibuf_160);
   SetIndexBuffer(5, g_ibuf_164);
   SetIndexBuffer(6, g_ibuf_168);
   SetIndexBuffer(7, g_ibuf_172);
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, gd_128, MACD_UP_ABOVE_ZERO_color);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, gd_128, MACD_UP_BELOW_ZERO_color);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, gd_128, MACD_DN_ABOVE_ZERO_color);
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, gd_128, MACD_DN_BELOW_ZERO_color);
   SetIndexStyle(4, DRAW_HISTOGRAM, STYLE_SOLID, gd_136, MACD_UP_ABOVE_ZERO_color);
   SetIndexStyle(5, DRAW_HISTOGRAM, STYLE_SOLID, gd_136, MACD_UP_BELOW_ZERO_color);
   SetIndexStyle(6, DRAW_HISTOGRAM, STYLE_SOLID, gd_136, MACD_DN_ABOVE_ZERO_color);
   SetIndexStyle(7, DRAW_HISTOGRAM, STYLE_SOLID, gd_136, MACD_DN_BELOW_ZERO_color);
   return (0);
}

int deinit() {
   ObjectDelete("macdm1");
   ObjectDelete("macdm5");
   ObjectDelete("macdm15");
   ObjectDelete("macdm30");
   ObjectDelete("macdh1");
   ObjectDelete("macdh4");
   ObjectDelete("macdd1");
   ObjectDelete("macdw1");
   ObjectDelete("macdmn1");
   return (0);
}

double MACDM2(int a_shift_0 = 0) {
   return (iMACD(NULL, 0, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, a_shift_0));
}

double MACD_SIGM2(int a_shift_0 = 0) {
   return (iMACD(NULL, 0, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, a_shift_0));
}

void SetCandleColor(int ai_0, int ai_4) {
   double ld_24 = MathMax(Open[ai_4], Close[ai_4]);
   double ld_32 = MathMin(Open[ai_4], Close[ai_4]);
   double high_8 = High[ai_4];
   double low_16 = Low[ai_4];
   g_ibuf_144[ai_4] = low_16;
   g_ibuf_160[ai_4] = ld_32;
   g_ibuf_148[ai_4] = low_16;
   g_ibuf_164[ai_4] = ld_32;
   g_ibuf_152[ai_4] = low_16;
   g_ibuf_168[ai_4] = ld_32;
   g_ibuf_156[ai_4] = low_16;
   g_ibuf_172[ai_4] = ld_32;
   switch (ai_0) {
   case 1:
      g_ibuf_144[ai_4] = high_8;
      g_ibuf_160[ai_4] = ld_24;
      return;
   case 2:
      g_ibuf_148[ai_4] = high_8;
      g_ibuf_164[ai_4] = ld_24;
      return;
   case 3:
      g_ibuf_152[ai_4] = high_8;
      g_ibuf_168[ai_4] = ld_24;
      return;
   case 4:
      g_ibuf_156[ai_4] = high_8;
      g_ibuf_172[ai_4] = ld_24;
      return;
      return;
   }
}

int start() {
   double ld_4;
   double ld_12;
   color color_20;
   color color_24;
   color color_28;
   color color_32;
   color color_36;
   color color_40;
   color color_44;
   color color_48;
   color color_52;
   for (int li_0 = MathMax(Bars - 1 - IndicatorCounted(), 1); li_0 >= 0; li_0--) {
      ld_4 = MACDM2(li_0);
      ld_12 = MACD_SIGM2(li_0);
      if (ld_4 > ld_12 && ld_4 > 0.0) SetCandleColor(1, li_0);
      else {
         if (ld_4 > ld_12 && ld_4 < 0.0) SetCandleColor(2, li_0);
         else {
            if (ld_4 < ld_12 && ld_4 > 0.0) SetCandleColor(3, li_0);
            else
               if (ld_4 < ld_12 && ld_4 < 0.0) SetCandleColor(4, li_0);
         }
      }
   }
   string ls_unused_56 = "";
   string ls_unused_64 = "";
   string ls_unused_72 = "";
   string ls_unused_80 = "";
   string ls_unused_88 = "";
   string ls_unused_96 = "";
   string ls_unused_104 = "";
   string ls_unused_112 = "";
   string ls_unused_120 = "";
   double imacd_128 = iMACD(NULL, PERIOD_M1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_136 = iMACD(NULL, PERIOD_M1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_144 = iMACD(NULL, PERIOD_M5, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_152 = iMACD(NULL, PERIOD_M5, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_160 = iMACD(NULL, PERIOD_M15, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_168 = iMACD(NULL, PERIOD_M15, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_176 = iMACD(NULL, PERIOD_M30, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_184 = iMACD(NULL, PERIOD_M30, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_192 = iMACD(NULL, PERIOD_H1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_200 = iMACD(NULL, PERIOD_H1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_208 = iMACD(NULL, PERIOD_H4, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_216 = iMACD(NULL, PERIOD_H4, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_224 = iMACD(NULL, PERIOD_D1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_232 = iMACD(NULL, PERIOD_D1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_240 = iMACD(NULL, PERIOD_W1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_248 = iMACD(NULL, PERIOD_W1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   double imacd_256 = iMACD(NULL, PERIOD_MN1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
   double imacd_264 = iMACD(NULL, PERIOD_MN1, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
   if (imacd_128 > imacd_136 && imacd_128 > 0.0) {
      ls_unused_56 = "-";
      color_20 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_128 <= imacd_136 && imacd_128 < 0.0) {
      ls_unused_56 = "-";
      color_20 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_128 > imacd_136 && imacd_128 < 0.0) {
      ls_unused_56 = "-";
      color_20 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_128 <= imacd_136 && imacd_128 > 0.0) {
      ls_unused_56 = "-";
      color_20 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_144 > imacd_152 && imacd_144 > 0.0) {
      ls_unused_64 = "-";
      color_24 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_144 <= imacd_152 && imacd_144 < 0.0) {
      ls_unused_64 = "-";
      color_24 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_144 > imacd_152 && imacd_144 < 0.0) {
      ls_unused_64 = "-";
      color_24 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_144 <= imacd_152 && imacd_144 > 0.0) {
      ls_unused_64 = "-";
      color_24 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_160 > imacd_168 && imacd_160 > 0.0) {
      ls_unused_72 = "-";
      color_28 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_160 <= imacd_168 && imacd_160 < 0.0) {
      ls_unused_72 = "-";
      color_28 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_160 > imacd_168 && imacd_160 < 0.0) {
      ls_unused_72 = "-";
      color_28 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_160 <= imacd_168 && imacd_160 > 0.0) {
      ls_unused_72 = "-";
      color_28 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_176 > imacd_184 && imacd_176 > 0.0) {
      ls_unused_80 = "-";
      color_32 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_176 <= imacd_184 && imacd_176 < 0.0) {
      ls_unused_80 = "-";
      color_32 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_176 > imacd_184 && imacd_176 < 0.0) {
      ls_unused_80 = "-";
      color_32 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_176 <= imacd_184 && imacd_176 > 0.0) {
      ls_unused_80 = "-";
      color_32 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_192 > imacd_200 && imacd_192 > 0.0) {
      ls_unused_88 = "-";
      color_36 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_192 <= imacd_200 && imacd_192 < 0.0) {
      ls_unused_88 = "-";
      color_36 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_192 > imacd_200 && imacd_192 < 0.0) {
      ls_unused_88 = "-";
      color_36 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_192 <= imacd_200 && imacd_192 > 0.0) {
      ls_unused_88 = "-";
      color_36 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_208 > imacd_216 && imacd_208 > 0.0) {
      ls_unused_96 = "-";
      color_40 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_208 <= imacd_216 && imacd_208 < 0.0) {
      ls_unused_96 = "-";
      color_40 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_208 > imacd_216 && imacd_208 < 0.0) {
      ls_unused_96 = "-";
      color_40 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_208 <= imacd_216 && imacd_208 > 0.0) {
      ls_unused_96 = "-";
      color_40 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_224 > imacd_232 && imacd_224 > 0.0) {
      ls_unused_104 = "-";
      color_44 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_224 <= imacd_232 && imacd_224 < 0.0) {
      ls_unused_104 = "-";
      color_44 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_224 > imacd_232 && imacd_224 < 0.0) {
      ls_unused_104 = "-";
      color_44 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_224 <= imacd_232 && imacd_224 > 0.0) {
      ls_unused_104 = "-";
      color_44 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_240 > imacd_248 && imacd_240 > 0.0) {
      ls_unused_112 = "-";
      color_48 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_240 <= imacd_248 && imacd_240 < 0.0) {
      ls_unused_112 = "-";
      color_48 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_240 > imacd_248 && imacd_240 < 0.0) {
      ls_unused_112 = "-";
      color_48 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_240 <= imacd_248 && imacd_240 > 0.0) {
      ls_unused_112 = "-";
      color_48 = MACD_DN_ABOVE_ZERO_color;
   }
   if (imacd_256 > imacd_136 && imacd_256 > 0.0) {
      ls_unused_120 = "-";
      color_52 = MACD_UP_ABOVE_ZERO_color;
   }
   if (imacd_256 <= imacd_264 && imacd_256 < 0.0) {
      ls_unused_120 = "-";
      color_52 = MACD_DN_BELOW_ZERO_color;
   }
   if (imacd_256 > imacd_264 && imacd_256 < 0.0) {
      ls_unused_120 = "-";
      color_52 = MACD_UP_BELOW_ZERO_color;
   }
   if (imacd_256 <= imacd_136 && imacd_256 > 0.0) {
      ls_unused_120 = "-";
      color_52 = MACD_DN_ABOVE_ZERO_color;
   }
   if (Show_MTF_Text == TRUE) {
      ObjectDelete("macdm1");
      ObjectCreate("macdm1", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdm1", "M1", MTF_TextSIZE, MTF_Text, color_20);
      ObjectSet("macdm1", OBJPROP_CORNER, 0);
      ObjectSet("macdm1", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 20) * MTF_TextSIZE / 9);
      ObjectSet("macdm1", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdm5");
      ObjectCreate("macdm5", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdm5", "M5", MTF_TextSIZE, MTF_Text, color_24);
      ObjectSet("macdm5", OBJPROP_CORNER, 0);
      ObjectSet("macdm5", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 40) * MTF_TextSIZE / 9);
      ObjectSet("macdm5", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdm15");
      ObjectCreate("macdm15", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdm15", "M15", MTF_TextSIZE, MTF_Text, color_28);
      ObjectSet("macdm15", OBJPROP_CORNER, 0);
      ObjectSet("macdm15", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 63) * MTF_TextSIZE / 9);
      ObjectSet("macdm15", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdm30");
      ObjectCreate("macdm30", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdm30", "M30", MTF_TextSIZE, MTF_Text, color_32);
      ObjectSet("macdm30", OBJPROP_CORNER, 0);
      ObjectSet("macdm30", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 90) * MTF_TextSIZE / 9);
      ObjectSet("macdm30", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdh1");
      ObjectCreate("macdh1", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdh1", "H1", MTF_TextSIZE, MTF_Text, color_36);
      ObjectSet("macdh1", OBJPROP_CORNER, 0);
      ObjectSet("macdh1", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 120) * MTF_TextSIZE / 9);
      ObjectSet("macdh1", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdh4");
      ObjectCreate("macdh4", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdh4", "H4", MTF_TextSIZE, MTF_Text, color_40);
      ObjectSet("macdh4", OBJPROP_CORNER, 0);
      ObjectSet("macdh4", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 140) * MTF_TextSIZE / 9);
      ObjectSet("macdh4", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdd1");
      ObjectCreate("macdd1", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdd1", "D1", MTF_TextSIZE, MTF_Text, color_44);
      ObjectSet("macdd1", OBJPROP_CORNER, 0);
      ObjectSet("macdd1", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 160) * MTF_TextSIZE / 9);
      ObjectSet("macdd1", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdw1");
      ObjectCreate("macdw1", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdw1", "W1", MTF_TextSIZE, MTF_Text, color_48);
      ObjectSet("macdw1", OBJPROP_CORNER, 0);
      ObjectSet("macdw1", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 180) * MTF_TextSIZE / 9);
      ObjectSet("macdw1", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
      ObjectDelete("macdmn1");
      ObjectCreate("macdmn1", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("macdmn1", "MN1", MTF_TextSIZE, MTF_Text, color_52);
      ObjectSet("macdmn1", OBJPROP_CORNER, 0);
      ObjectSet("macdmn1", OBJPROP_XDISTANCE, (Shift_MTF_Text_SIDEWAYS + 203) * MTF_TextSIZE / 9);
      ObjectSet("macdmn1", OBJPROP_YDISTANCE, Shift_MTF_Text_UP_DN + 10);
   }
   return (0);
}